home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / bigclaws.s < prev    next >
Text File  |  1997-01-31  |  15KB  |  908 lines

  1. ItsABigClaws:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  
  10.  move.w #64*256+64,14(a0)
  11.  move.w #$8080,6(a0)
  12.  
  13.  move.w 12(a0),GraphicRoom(a0)
  14.  move.b worry(a0),d0
  15.  move.b d0,d1
  16.  and.w #128,d1
  17.  and.b #127,d0
  18.  beq.s .noless
  19.  sub.b #1,d0
  20. .noless:
  21.  add.b d0,d1
  22.  move.b d1,worry(a0)
  23.  
  24.  move.w (a0),CollId
  25.  move.w #160,extlen
  26.  move.b #2,awayfromwall
  27.  
  28.  move.l #20*256,StepUpVal
  29.  move.l #20*256,StepDownVal
  30.  move.l #256*128,thingheight
  31.  move.l #4,deadframe
  32.  move.w #27,screamsound
  33.  move.w #128,nasheight
  34.  clr.b gotgun
  35.  move.w 12(a0),d2
  36.  bge.s .stillalive
  37. .notthisone:
  38.  rts
  39. .stillalive:
  40.  
  41.  tst.b numlives(a0)
  42.  bgt.s .notdying
  43.  move.b #0,numlives(a0)
  44.  move.l ZoneAdds,a1
  45.  move.l (a1,d2.w*4),a1
  46.  add.l LEVELDATA,a1
  47.  move.l 2(a1),d0
  48.  asr.l #7,d0
  49.  sub.w nasheight,d0
  50.  move.w d0,4(a0)
  51.  
  52.  move.w 10(a0),d0
  53.  cmp.w #9,d0
  54.  bge .onfloordead
  55.  add.w #1,10(a0)
  56.  bra .notthisone
  57.  
  58. .onfloordead:
  59.  
  60.  rts
  61.  
  62. .notdying: 
  63.  
  64.  tst.b 17(a0)
  65.  beq.s .cantseeplayer
  66.  tst.w ThirdTimer(a0)
  67.  ble BigClawsAttack
  68.  move.w TempFrames,d0
  69.  sub.w d0,ThirdTimer(a0)
  70.  bge .waitandsee
  71.  move.w #0,ThirdTimer(a0)
  72.  bra .waitandsee
  73.  
  74. .cantseeplayer:
  75.  
  76.  jsr GetRand
  77.  lsr.w #4,d0
  78.  and.w #63,d0
  79.  add.w #20,d0
  80.  move.w d0,ThirdTimer(a0)
  81.  
  82. .waitandsee:
  83.  
  84.  move.w #70,FourthTimer(a0)
  85.  
  86.  move.w 12(a0),d2
  87.  move.l ZoneAdds,a5
  88.  move.l (a5,d2.w*4),d0
  89.  add.l LEVELDATA,d0
  90.  move.l d0,objroom
  91.  
  92.  jsr ViewpointToDraw
  93.  
  94.  asl.l #2,d0
  95.  add.w alframe+2,d0
  96.  add.l #$000e0000,d0
  97.  move.l d0,8(a0)
  98.  
  99.  move.w 4(a0),d0
  100.  sub.w #128,d0
  101.  ext.l d0
  102.  asl.l #7,d0
  103.  move.l d0,newy
  104.  move.l d0,oldy
  105.  
  106.  move.w 12(a0),FromZone
  107.  jsr CheckTeleport
  108.  tst.b OKTEL
  109.  beq.s .notel
  110.  move.l floortemp,d0
  111.  asr.l #7,d0
  112.  add.w d0,4(a0)
  113.  bra .nochangedir
  114. .notel:
  115.  
  116.  move.w maxspd(a0),d2
  117.  muls TempFrames,d2
  118.  move.w d2,speed
  119.  move.w Facing(a0),d0
  120.  move.b ObjInTop(a0),StoodInTop
  121.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  122.  jsr GoInDirection
  123.  move.w #%1000000000,wallflags
  124.  
  125.  move.l #%11111111110111100001,CollideFlags
  126.  jsr Collision
  127.  tst.b hitwall
  128.  beq.s .canmove
  129.  
  130.  move.w oldx,newx
  131.  move.w oldz,newz
  132.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  133.  bra .hitathing
  134.  
  135. .canmove:
  136.  
  137.  jsr MoveObject
  138.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  139.  move.b StoodInTop,ObjInTop(a0)
  140.  
  141. .hitathing:
  142.  
  143.  tst.b hitwall
  144.  beq.s .nochangedir
  145.  move.w #-1,ObjTimer(a0)
  146. .nochangedir
  147.  
  148.  move.l objroom,a2
  149.  move.w (a2),12(a0)
  150.  move.w newx,(a1)
  151.  move.w newz,4(a1)
  152.  
  153.  move.w (a2),d0
  154.  move.l #ZoneBrightTable,a5
  155.  move.l (a5,d0.w*4),d0
  156.  tst.b ObjInTop(a0)
  157.  bne.s .okbit
  158.  swap d0
  159. .okbit:
  160.  move.w d0,2(a0)
  161.  
  162.  move.l ToZoneFloor(a2),d0
  163.  tst.b ObjInTop(a0)
  164.  beq.s .notintop
  165.  move.l ToUpperFloor(a2),d0
  166. .notintop:
  167.  asr.l #7,d0
  168.  sub.w #128,d0
  169.  move.w d0,4(a0)
  170.  
  171.  moveq #0,d2
  172.  move.b damagetaken(a0),d2
  173.  beq .noscream
  174.  
  175.  asr.b #4,d2 
  176.  beq .noscream
  177.  
  178.  sub.b d2,numlives(a0)
  179.  bgt .notdeadyet
  180.  
  181. ; cmp.b #1,d2
  182. ; ble.s .noexplode
  183.  
  184.  movem.l d0-d7/a0-a6,-(a7)
  185.  sub.l ObjectPoints,a1
  186.  add.l #ObjRotated,a1
  187.  move.l (a1),Noisex
  188.  move.w #400,Noisevol
  189.  move.w #14,Samplenum
  190.  move.b #1,chanpick
  191.  clr.b notifplaying
  192.  st backbeat
  193.  move.b 1(a0),IDNUM
  194.  jsr MakeSomeNoise
  195.  movem.l (a7)+,d0-d7/a0-a6
  196.  
  197.  movem.l d0-d7/a0-a6,-(a7)
  198.  move.w #0,d0
  199.  move.w #7,d2
  200.  move.w #31,d3
  201.  jsr ExplodeIntoBits
  202.  movem.l (a7)+,d0-d7/a0-a6
  203.  
  204.  move.b #4,16(a0)
  205.  move.b #%1000,17(a0)
  206.  move.l #$50003,8(a0)
  207.  move.w #$2020,6(a0)
  208.  move.w #$1010,14(a0)
  209.  
  210.  
  211.  rts
  212.  
  213. .noexplode:
  214.  
  215.  movem.l d0-d7/a0-a6,-(a7)
  216.  sub.l ObjectPoints,a1
  217.  add.l #ObjRotated,a1
  218.  move.l (a1),Noisex
  219.  move.w #200,Noisevol
  220.  move.w screamsound,Samplenum
  221.  move.b #1,chanpick
  222.  clr.b notifplaying
  223.  st backbeat
  224.  move.b 1(a0),IDNUM
  225.  jsr MakeSomeNoise
  226.  movem.l (a7)+,d0-d7/a0-a6
  227.  move.l deadframe,8(a0)
  228.  rts
  229.  
  230. .notdeadyet:
  231.  clr.b damagetaken(a0)
  232.  movem.l d0-d7/a0-a6,-(a7)
  233.  sub.l ObjectPoints,a1
  234.  add.l #ObjRotated,a1
  235.  move.l (a1),Noisex
  236.  move.w #200,Noisevol
  237.  move.w screamsound,Samplenum
  238.  move.b #1,chanpick
  239.  clr.b notifplaying
  240.  move.b 1(a0),IDNUM
  241.  st backbeat
  242.  jsr MakeSomeNoise
  243.  movem.l (a7)+,d0-d7/a0-a6
  244.  
  245. .noscream
  246.  
  247.  
  248.  move.w TempFrames,d0
  249.  sub.w d0,ObjTimer(a0)
  250.  bge.s .keepsamedir
  251.  
  252.  jsr GetRand
  253.  and.w #8190,d0
  254.  move.w d0,Facing(a0)
  255.  move.w #150,ObjTimer(a0)
  256.  
  257. .keepsamedir:
  258.  
  259.  move.w TempFrames,d0
  260.  sub.w d0,SecTimer(a0)
  261.  bge.s .nohiss
  262.  
  263.  jsr GetRand
  264.  lsr.w #6,d0
  265.  and.w #1,d0
  266.  add.w #17,d0
  267.  movem.l d0-d7/a0-a6,-(a7)
  268.  sub.l ObjectPoints,a1
  269.  add.l #ObjRotated,a1
  270.  move.l (a1),Noisex
  271.  move.w #100,Noisevol
  272.  move.w d0,Samplenum
  273.  move.b #1,chanpick
  274.  clr.b notifplaying
  275.  move.b 1(a0),IDNUM
  276.  st backbeat
  277.  jsr MakeSomeNoise
  278.  movem.l (a7)+,d0-d7/a0-a6
  279.  
  280.  Jsr GetRand
  281.  lsr.w #6,d0
  282.  and.w #255,d0
  283.  add.w #300,d0
  284.  move.w d0,SecTimer(a0)
  285.  
  286. .nohiss:
  287.  
  288.  move.b ObjInTop(a0),ViewerTop
  289.  move.b PLR1_StoodInTop,TargetTop
  290.  move.l PLR1_Roompt,ToRoom
  291.  move.l objroom,FromRoom
  292.  move.w newx,Viewerx
  293.  move.w newz,Viewerz
  294.  move.w PLR1_xoff,Targetx
  295.  move.w PLR1_zoff,Targetz
  296.  move.l PLR1_yoff,d0
  297.  asr.l #7,d0
  298.  move.w d0,Targety
  299.  move.w 4(a0),Viewery
  300.  jsr CanItBeSeen
  301.  
  302.  clr.b 17(a0)
  303.  
  304.  tst.b CanSee
  305.  beq .carryonprowling
  306.  
  307.  move.b #1,17(a0)
  308.  
  309. .carryonprowling:
  310.  
  311.  move.b ObjInTop(a0),ViewerTop
  312.  move.b PLR2_StoodInTop,TargetTop
  313.  move.l PLR2_Roompt,ToRoom
  314.  move.l objroom,FromRoom
  315.  move.w newx,Viewerx
  316.  move.w newz,Viewerz
  317.  move.w PLR2_xoff,Targetx
  318.  move.w PLR2_zoff,Targetz
  319.  move.l PLR2_yoff,d0
  320.  asr.l #7,d0
  321.  move.w d0,Targety
  322.  move.w 4(a0),Viewery
  323.  jsr CanItBeSeen
  324.  
  325.  tst.b CanSee
  326.  beq .carryonprowling2
  327.  
  328.  or.b #2,17(a0)
  329.  
  330. .carryonprowling2:
  331.  
  332.  
  333.  rts
  334.  
  335. BigClawsAttack:
  336.  
  337.  move.w 12(a0),d2
  338.  move.l ZoneAdds,a5
  339.  move.l (a5,d2.w*4),d0
  340.  add.l LEVELDATA,d0
  341.  move.l d0,objroom
  342.  
  343.  btst #0,17(a0)
  344.  beq BigClawsAttackPLR2
  345.  btst #1,17(a0)
  346.  beq BigClawsAttackPLR1
  347.  
  348.  move.l ObjectPoints,a1
  349.  move.w (a0),d0
  350.  move.w (a1,d0.w*8),d1
  351.  move.w 4(a1,d0.w*8),d2
  352.  
  353.  move.w PLR1_xoff,d3
  354.  move.w PLR1_zoff,d4
  355.  sub.w d1,d3
  356.  sub.w d2,d4
  357.  muls d3,d3
  358.  muls d4,d4
  359.  add.l d4,d3
  360.  move.w PLR2_xoff,d4
  361.  move.w PLR2_zoff,d5
  362.  sub.w d1,d4
  363.  sub.w d2,d5
  364.  muls d4,d4
  365.  muls d5,d5
  366.  add.l d5,d4
  367.  cmp.l d3,d4
  368.  ble BigClawsAttackPLR2
  369.  
  370.  
  371. BigClawsAttackPLR1:
  372.  
  373.  
  374.  move.w TempFrames,d0
  375.  sub.w d0,FourthTimer(a0)
  376.  bgt.s .oktoshoot
  377.  move.w #50,ThirdTimer(a0)
  378. .oktoshoot:
  379.  
  380.  move.w 12(a0),d2
  381.  move.l ZoneAdds,a5
  382.  move.l (a5,d2.w*4),d0
  383.  add.l LEVELDATA,d0
  384.  move.l d0,objroom
  385.  
  386.  jsr ViewpointToDraw
  387.  
  388.  asl.l #2,d0
  389.  bne.s .notflfl
  390.  move.l #16,d0
  391. .notflfl:
  392.  
  393.  add.l #$e0000,d0
  394.  move.l d0,8(a0)
  395.  
  396.  move.w PLR1_xoff,newx
  397.  move.w PLR1_zoff,newz
  398.  move.w (a0),d1
  399.  move.l #ObjRotated,a6
  400.  move.l ObjectPoints,a1
  401.  lea (a1,d1.w*8),a1
  402.  lea (a6,d1.w*8),a6
  403.  move.w (a1),oldx
  404.  move.w 4(a1),oldz
  405.  move.w maxspd(a0),d2
  406.  muls.w TempFrames,d2
  407.  move.w d2,speed
  408.  move.w #80,Range
  409.  move.w 4(a0),d0
  410.  ext.l d0
  411.  asl.l #7,d0
  412.  sub.l #128*128,d0
  413.  move.l d0,newy
  414.  move.l d0,oldy
  415.  
  416.  move.b ObjInTop(a0),StoodInTop
  417.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  418.  clr.b canshove
  419.  clr.b GotThere
  420.  jsr HeadTowardsAng
  421.  move.w #%1000000000,wallflags
  422.  
  423.   
  424.  Jsr MoveObject
  425.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  426.  move.b StoodInTop,ObjInTop(a0)
  427.  
  428.  move.w AngRet,Facing(a0)
  429.  
  430.  move.l objroom,a2
  431.  move.w (a2),12(a0)
  432.  move.w oldx,(a1)
  433.  move.w oldz,4(a1)
  434.  
  435.  move.w (a2),d0
  436.  move.l #ZoneBrightTable,a5
  437.  move.l (a5,d0.w*4),d0
  438.  tst.b ObjInTop(a0)
  439.  bne.s .okbit
  440.  swap d0
  441. .okbit:
  442.  move.w d0,2(a0)
  443.  
  444.  move.l ToZoneFloor(a2),d0
  445.  tst.b ObjInTop(a0)
  446.  beq.s .notintop
  447.  move.l ToUpperFloor(a2),d0
  448. .notintop:
  449.  asr.l #7,d0
  450.  sub.w #128,d0
  451.  move.w d0,4(a0)
  452.  
  453.  moveq #0,d2
  454.  move.b damagetaken(a0),d2
  455.  beq .noscream
  456.  asr.b #4,d2 
  457.  beq .noscream
  458.  
  459.  sub.b d2,numlives(a0)
  460.  bgt .notdeadyet
  461.  
  462. ; cmp.b #1,d2
  463. ; ble.s .noexplode
  464.  
  465.  movem.l d0-d7/a0-a6,-(a7)
  466.  sub.l ObjectPoints,a1
  467.  add.l #ObjRotated,a1
  468.  move.l (a1),Noisex
  469.  move.w #400,Noisevol
  470.  move.w #14,Samplenum
  471.  move.b #1,chanpick
  472.  clr.b notifplaying
  473.  st backbeat
  474.  move.b 1(a0),IDNUM
  475.  jsr MakeSomeNoise
  476.  movem.l (a7)+,d0-d7/a0-a6
  477.  
  478.  movem.l d0-d7/a0-a6,-(a7)
  479.  move.w #0,d0
  480.  move.w #9,d2
  481.  move.w #31,d3
  482.  jsr ExplodeIntoBits
  483.  movem.l (a7)+,d0-d7/a0-a6
  484.  
  485.  move.b #4,16(a0)
  486.  move.b #%1000,17(a0)
  487.  move.l #$50003,8(a0)
  488.  move.w #$2020,6(a0)
  489.  move.w #$1010,14(a0)
  490.  
  491.  rts
  492.  
  493. .noexplode:
  494.  
  495.  movem.l d0-d7/a0-a6,-(a7)
  496.  sub.l ObjectPoints,a1
  497.  add.l #ObjRotated,a1
  498.  move.l (a1),Noisex
  499.  move.w #200,Noisevol
  500.  move.w screamsound,Samplenum
  501.  move.b #1,chanpick
  502.  clr.b notifplaying
  503.  st backbeat
  504.  move.b 1(a0),IDNUM
  505.  jsr MakeSomeNoise
  506.  movem.l (a7)+,d0-d7/a0-a6
  507.  move.l deadframe,8(a0)
  508.  rts
  509.  
  510. .notdeadyet:
  511.  clr.b damagetaken(a0)
  512.  movem.l d0-d7/a0-a6,-(a7)
  513.  sub.l ObjectPoints,a1
  514.  add.l #ObjRotated,a1
  515.  move.l (a1),Noisex
  516.  move.w #200,Noisevol
  517.  move.w screamsound,Samplenum
  518.  move.b #1,chanpick
  519.  clr.b notifplaying
  520.  move.b 1(a0),IDNUM
  521.  st backbeat
  522.  jsr MakeSomeNoise
  523.  movem.l (a7)+,d0-d7/a0-a6
  524.  
  525. .noscream
  526.  
  527. ; tst.b canshootgun
  528. ; beq .cantshoot
  529.  cmp.w #20,FourthTimer(a0)
  530.  bge .cantshoot
  531.  
  532.  move.w #30,FourthTimer(a0)
  533.  
  534.  move.w ThirdTimer(a0),d0
  535.  sub.w #1,d0
  536.  cmp.w #-1,d0
  537.  bge.s .noreset
  538.  
  539.  jsr GetRand
  540.  and.w #127,d0
  541.  add.w #100,d0
  542.  
  543. .noreset:
  544.  move.w d0,ThirdTimer(a0)
  545.  
  546.  
  547.  move.l #$e0011,8(a0)
  548.  
  549.  move.w #9,Samplenum
  550.  move.b #2,SHOTTYPE
  551.  move.b #10,SHOTPOWER
  552.  move.w #64,SHOTSPEED
  553.  move.w #6,SHOTSHIFT
  554.  move.w #-700,SHOTOFFMULT
  555.  move.l #-10*128,SHOTYOFF
  556.  move.w #-100,2(a0)
  557.  
  558.  jsr FireAtPlayer1
  559.  
  560. .cantshoot:
  561.  
  562.  
  563.  move.w TempFrames,d0
  564.  sub.w d0,SecTimer(a0)
  565.  bge.s .nohiss
  566.  
  567.  movem.l d0-d7/a0-a6,-(a7)
  568.  sub.l ObjectPoints,a1
  569.  add.l #ObjRotated,a1
  570.  move.l (a1),Noisex
  571.  move.w #100,Noisevol
  572.  move.w #16,Samplenum
  573.  move.b #1,chanpick
  574.  clr.b notifplaying
  575.  move.b 1(a0),IDNUM
  576.  st backbeat
  577.  jsr MakeSomeNoise
  578.  movem.l (a7)+,d0-d7/a0-a6
  579.  
  580.  Jsr GetRand
  581.  lsr.w #6,d0
  582.  and.w #255,d0
  583.  add.w #300,d0
  584.  move.w d0,SecTimer(a0)
  585.  
  586. .nohiss:
  587.  
  588.  move.b ObjInTop(a0),ViewerTop
  589.  move.b PLR1_StoodInTop,TargetTop
  590.  move.l PLR1_Roompt,ToRoom
  591.  move.l objroom,FromRoom
  592.  move.w newx,Viewerx
  593.  move.w newz,Viewerz
  594.  move.w PLR1_xoff,Targetx
  595.  move.w PLR1_zoff,Targetz
  596.  move.l PLR1_yoff,d0
  597.  asr.l #7,d0
  598.  move.w d0,Targety
  599.  move.w 4(a0),Viewery
  600.  jsr CanItBeSeen
  601.  
  602.  clr.b 17(a0)
  603.  tst.b CanSee
  604.  beq .carryonprowling
  605.  
  606.  move.b #1,17(a0)
  607.  
  608. .carryonprowling:
  609.  
  610.  cmp.b #'n',mors
  611.  beq.s .carryonprowling2
  612.  
  613.  
  614.  move.b ObjInTop(a0),ViewerTop
  615.  move.b PLR2_StoodInTop,TargetTop
  616.  move.l PLR2_Roompt,ToRoom
  617.  move.l objroom,FromRoom
  618.  move.w newx,Viewerx
  619.  move.w newz,Viewerz
  620.  move.w PLR2_xoff,Targetx
  621.  move.w PLR2_zoff,Targetz
  622.  move.l PLR2_yoff,d0
  623.  asr.l #7,d0
  624.  move.w d0,Targety
  625.  move.w 4(a0),Viewery
  626.  jsr CanItBeSeen
  627.  
  628.  tst.b CanSee
  629.  beq .carryonprowling2
  630.  
  631.  or.b #2,17(a0)
  632.  
  633. .carryonprowling2:
  634.  
  635.  
  636.  rts
  637.  
  638. *************************************************
  639.  
  640. BigClawsAttackPLR2:
  641.  
  642.   
  643.  move.w TempFrames,d0
  644.  sub.w d0,FourthTimer(a0)
  645.  bgt.s .oktoshoot
  646.  move.w #50,ThirdTimer(a0)
  647. .oktoshoot:
  648.  
  649.  move.w 12(a0),d2
  650.  move.l ZoneAdds,a5
  651.  move.l (a5,d2.w*4),d0
  652.  add.l LEVELDATA,d0
  653.  move.l d0,objroom
  654.  
  655.  jsr ViewpointToDraw
  656.  
  657.  asl.l #2,d0
  658.  bne.s .notflfl
  659.  move.l #16,d0
  660. .notflfl:
  661.  
  662.  add.l #$e0000,d0
  663.  move.l d0,8(a0)
  664.  
  665.  move.w PLR2_xoff,newx
  666.  move.w PLR2_zoff,newz
  667.  move.w (a0),d1
  668.  move.l #ObjRotated,a6
  669.  move.l ObjectPoints,a1
  670.  lea (a1,d1.w*8),a1
  671.  lea (a6,d1.w*8),a6
  672.  move.w (a1),oldx
  673.  move.w 4(a1),oldz
  674.  move.w maxspd(a0),d2
  675.  muls.w TempFrames,d2
  676.  move.w d2,speed
  677.  move.w #80,Range
  678.  move.w 4(a0),d0
  679.  ext.l d0
  680.  asl.l #7,d0
  681.  sub.l #128*128,d0
  682.  move.l d0,newy
  683.  move.l d0,oldy
  684.  
  685.  move.b ObjInTop(a0),StoodInTop
  686.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  687.  clr.b canshove
  688.  clr.b GotThere
  689.  jsr HeadTowardsAng
  690.  move.w #%1000000000,wallflags
  691.  
  692.   
  693.  Jsr MoveObject
  694.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  695.  move.b StoodInTop,ObjInTop(a0)
  696.  
  697.  move.w AngRet,Facing(a0)
  698.  
  699.  move.l objroom,a2
  700.  move.w (a2),12(a0)
  701.  move.w oldx,(a1)
  702.  move.w oldz,4(a1)
  703.  
  704.  move.w (a2),d0
  705.  move.l #ZoneBrightTable,a5
  706.  move.l (a5,d0.w*4),d0
  707.  tst.b ObjInTop(a0)
  708.  bne.s .okbit
  709.  swap d0
  710. .okbit:
  711.  move.w d0,2(a0)
  712.  
  713.  move.l ToZoneFloor(a2),d0
  714.  tst.b ObjInTop(a0)
  715.  beq.s .notintop
  716.  move.l ToUpperFloor(a2),d0
  717. .notintop:
  718.  asr.l #7,d0
  719.  sub.w #128,d0
  720.  move.w d0,4(a0)
  721.  
  722.  move.b damagetaken(a0),d2
  723.  beq .noscream
  724.  asr.b #4,d2 
  725.  beq .noscream
  726.  
  727.  sub.b d2,numlives(a0)
  728.  bgt .notdeadyet
  729.  
  730. ; cmp.b #1,d2
  731. ; ble.s .noexplode
  732.  
  733.  movem.l d0-d7/a0-a6,-(a7)
  734.  sub.l ObjectPoints,a1
  735.  add.l #ObjRotated,a1
  736.  move.l (a1),Noisex
  737.  move.w #400,Noisevol
  738.  move.w #14,Samplenum
  739.  move.b #1,chanpick
  740.  clr.b notifplaying
  741.  st backbeat
  742.  move.b 1(a0),IDNUM
  743.  jsr MakeSomeNoise
  744.  movem.l (a7)+,d0-d7/a0-a6
  745.  
  746.  movem.l d0-d7/a0-a6,-(a7)
  747.  move.w #0,d0
  748.  move.w #9,d2
  749.  move.w #31,d3
  750.  jsr ExplodeIntoBits
  751.  movem.l (a7)+,d0-d7/a0-a6
  752.  
  753.  move.b #4,16(a0)
  754.  move.b #%1000,17(a0)
  755.  move.l #$50003,8(a0)
  756.  move.w #$2020,6(a0)
  757.  move.w #$1010,14(a0)
  758.  
  759.  rts
  760.  
  761. .noexplode:
  762.  
  763.  movem.l d0-d7/a0-a6,-(a7)
  764.  sub.l ObjectPoints,a1
  765.  add.l #ObjRotated,a1
  766.  move.l (a1),Noisex
  767.  move.w #200,Noisevol
  768.  move.w screamsound,Samplenum
  769.  move.b #1,chanpick
  770.  clr.b notifplaying
  771.  st backbeat
  772.  move.b 1(a0),IDNUM
  773.  jsr MakeSomeNoise
  774.  movem.l (a7)+,d0-d7/a0-a6
  775.  move.l deadframe,8(a0)
  776.  rts
  777.  
  778. .notdeadyet:
  779.  clr.b damagetaken(a0)
  780.  movem.l d0-d7/a0-a6,-(a7)
  781.  sub.l ObjectPoints,a1
  782.  add.l #ObjRotated,a1
  783.  move.l (a1),Noisex
  784.  move.w #200,Noisevol
  785.  move.w screamsound,Samplenum
  786.  move.b #1,chanpick
  787.  clr.b notifplaying
  788.  move.b 1(a0),IDNUM
  789.  st backbeat
  790.  jsr MakeSomeNoise
  791.  movem.l (a7)+,d0-d7/a0-a6
  792.  
  793. .noscream
  794.  
  795. ; tst.b canshootgun
  796. ; beq .cantshoot
  797.  cmp.w #20,FourthTimer(a0)
  798.  bge .cantshoot
  799.  
  800.  move.w #30,FourthTimer(a0)
  801.  
  802.  move.w ThirdTimer(a0),d0
  803.  sub.w #1,d0
  804.  cmp.w #-1,d0
  805.  bge.s .noreset
  806.  
  807.  jsr GetRand
  808.  and.w #127,d0
  809.  add.w #100,d0
  810.  
  811. .noreset:
  812.  move.w d0,ThirdTimer(a0)
  813.  
  814.  
  815.  move.l #$e0011,8(a0)
  816.  
  817.  move.w #9,Samplenum
  818.  move.b #2,SHOTTYPE
  819.  move.b #10,SHOTPOWER
  820.  move.w #64,SHOTSPEED
  821.  move.w #6,SHOTSHIFT
  822.  move.w #-700,SHOTOFFMULT
  823.  move.l #-10*128,SHOTYOFF
  824.  move.w #-100,2(a0)
  825.  
  826.  jsr FireAtPlayer2
  827.  
  828. .cantshoot:
  829.  
  830.  
  831.  move.w TempFrames,d0
  832.  sub.w d0,SecTimer(a0)
  833.  bge.s .nohiss
  834.  
  835.  movem.l d0-d7/a0-a6,-(a7)
  836.  sub.l ObjectPoints,a1
  837.  add.l #ObjRotated,a1
  838.  move.l (a1),Noisex
  839.  move.w #100,Noisevol
  840.  move.w #16,Samplenum
  841.  move.b #1,chanpick
  842.  clr.b notifplaying
  843.  move.b 1(a0),IDNUM
  844.  st backbeat
  845.  jsr MakeSomeNoise
  846.  movem.l (a7)+,d0-d7/a0-a6
  847.  
  848.  Jsr GetRand
  849.  lsr.w #6,d0
  850.  and.w #255,d0
  851.  add.w #300,d0
  852.  move.w d0,SecTimer(a0)
  853.  
  854. .nohiss:
  855.  
  856.  move.b ObjInTop(a0),ViewerTop
  857.  move.b PLR1_StoodInTop,TargetTop
  858.  move.l PLR1_Roompt,ToRoom
  859.  move.l objroom,FromRoom
  860.  move.w newx,Viewerx
  861.  move.w newz,Viewerz
  862.  move.w PLR1_xoff,Targetx
  863.  move.w PLR1_zoff,Targetz
  864.  move.l PLR1_yoff,d0
  865.  asr.l #7,d0
  866.  move.w d0,Targety
  867.  move.w 4(a0),Viewery
  868.  jsr CanItBeSeen
  869.  
  870.  clr.b 17(a0)
  871.  tst.b CanSee
  872.  beq .carryonprowling
  873.  
  874.  move.b #1,17(a0)
  875.  
  876. .carryonprowling:
  877.  
  878.  cmp.b #'n',mors
  879.  beq.s .carryonprowling2
  880.  
  881.  
  882.  move.b ObjInTop(a0),ViewerTop
  883.  move.b PLR2_StoodInTop,TargetTop
  884.  move.l PLR2_Roompt,ToRoom
  885.  move.l objroom,FromRoom
  886.  move.w newx,Viewerx
  887.  move.w newz,Viewerz
  888.  move.w PLR2_xoff,Targetx
  889.  move.w PLR2_zoff,Targetz
  890.  move.l PLR2_yoff,d0
  891.  asr.l #7,d0
  892.  move.w d0,Targety
  893.  move.w 4(a0),Viewery
  894.  jsr CanItBeSeen
  895.  
  896.  tst.b CanSee
  897.  beq .carryonprowling2
  898.  
  899.  or.b #2,17(a0)
  900.  
  901. .carryonprowling2:
  902.  
  903.  
  904.  
  905.  rts
  906.  
  907.  
  908.